<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    // 方法1: arr.flat(Infinity)
    const nestedArray = [1, [2, [3, [4, 5]]], 6]
    // console.log("flat(Infinity):", nestedArray.flat(Infinity)) // [1, 2, 3, 4, 5, 6]

    // // 方法2: 递归 + reduce
    // function flattenDeepReduce(arr) {
    //   return arr.reduce(
    //     (acc, val) =>
    //       Array.isArray(val)
    //         ? acc.concat(flattenDeepReduce(val))
    //         : acc.concat(val),
    //     []
    //   )
    // }
    // console.log("递归reduce扁平化:", flattenDeepReduce(nestedArray)) // [1, 2, 3, 4, 5, 6]

    // // 方法3: 迭代 + 栈 (非递归)
    // function flattenIterative(arr) {
    //   const stack = [...arr]
    //   const res = []
    //   while (stack.length) {
    //     const next = stack.pop() // 从栈顶取出
    //     if (Array.isArray(next)) {
    //       stack.push(...next) // 如果是数组，则将其元素再次入栈（注意顺序，pop是后进先出，所以用push把元素按原相对顺序展开）
    //     } else {
    //       res.unshift(next) // 如果不是数组，则添加到结果数组的开头
    //     }
    //   }
    //   return res
    // }
    // console.log("迭代栈扁平化:", flattenIterative(nestedArray)) // [1, 2, 3, 4, 5, 6]

    function shuzupph(nestedArray) {
      let result = []
      for (let i = 0; i < nestedArray.length; i++) {
        if (Array.isArray(nestedArray[i])) {
          result = result.concat(shuzupph(nestedArray[i]))
        } else {
          result.push(nestedArray[i])
        }
      }
      return result
    }
    console.log("递归扁平化:", shuzupph(nestedArray)) // [1, 2, 3, 4, 5, 6]
  </script>
</html>
